import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;

public class DateComparator {
	// 定义日期格式（用户需按此格式输入：年-月-日，例如2023-10-01）
	private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		try {
			// 获取第一个日期
			System.out.print("请输入第一个日期（格式：yyyy-MM-dd）：");
			LocalDate date1 = parseDate(scanner.nextLine().trim());

			// 获取第二个日期
			System.out.print("请输入第二个日期（格式：yyyy-MM-dd）：");
			LocalDate date2 = parseDate(scanner.nextLine().trim());

			// 判断日期大小关系
			compareDates(date1, date2);

			// 计算间隔天数
			calculateDaysBetween(date1, date2);

		} catch (DateTimeParseException e) {
			System.out.println("输入错误：" + e.getMessage() + "，请使用正确格式（yyyy-MM-dd）");
		} finally {
			scanner.close();
		}
	}

	/**
	 * 将字符串解析为LocalDate对象
	 * @param dateStr 日期字符串（格式：yyyy-MM-dd）
	 * @return 解析后的LocalDate对象
	 * @throws DateTimeParseException 格式错误时抛出
	 */
	private static LocalDate parseDate(String dateStr) throws DateTimeParseException {
		return LocalDate.parse(dateStr, DATE_FORMATTER);
	}

	/**
	 * 比较两个日期的大小关系
	 * @param date1 第一个日期
	 * @param date2 第二个日期
	 */
	private static void compareDates(LocalDate date1, LocalDate date2) {
		System.out.println("\n===== 日期大小关系 =====");
		if (date1.isEqual(date2)) {
			System.out.println("两个日期相同：" + date1.format(DATE_FORMATTER));
		} else if (date1.isBefore(date2)) {
			System.out.println(date1.format(DATE_FORMATTER) + " 在 " + date2.format(DATE_FORMATTER) + " 之前");
		} else {
			System.out.println(date1.format(DATE_FORMATTER) + " 在 " + date2.format(DATE_FORMATTER) + " 之后");
		}
	}

	/**
	 * 计算两个日期之间的间隔天数
	 * @param date1 第一个日期
	 * @param date2 第二个日期
	 */
	private static void calculateDaysBetween(LocalDate date1, LocalDate date2) {
		// 使用ChronoUnit计算两个日期的天数差（取绝对值确保为正数）
		long days = Math.abs(ChronoUnit.DAYS.between(date1, date2));
		System.out.println("\n===== 日期间隔 =====");
		System.out.println(date1.format(DATE_FORMATTER) + " 与 " + date2.format(DATE_FORMATTER) + " 间隔 " + days + " 天");
	}
}